Conventionally, graphics processing units (GPUs) have included a graphics pipeline with a vertex engine capable of processing a stream of vertices provided by an application. In a conventional GPU at least two main types of operations, namely, vertex processing and primitive processing, are performed. Vertex processing, may involve texture coordinate generation, lighting, transforming from one space to another, and the like, using a vertex engine within a GPU. Such a vertex engine may be programmed through an application programming interface (API). Primitive processing using a primitive engine within a GPU may involve primitive subdivision, face culling, clipping, and the like. In conventional GPUs primitive processing is fixed, i.e. not programmable.
By providing a programmable vertex engine, flexibility and functionality is enhanced. However, processing is limited to triangle strips, quad (quadrilateral) strips, and line strips with a limited number of vertices. It is desirable to provide a general purpose scheme to define vertices, including connectivity for a collection of primitives such as triangle meshes and quad meshes. Furthermore, it is desirable and useful to provide a primitive engine access to vertices of a primitive and optionally with access to vertices of neighboring primitives.
Accordingly, it would be both desirable and useful to provide vertex indexing to enhance vertex processing to facilitate increasing programmability of a vertex engine and provide a general purpose definition of vertices within one or more primitives.